package day6;

import java.util.ArrayList;
import java.util.Scanner;

/*
    1.抽象类中能否定义普通方法，抽象方法能否定义在普通类中，抽象类能否创建实例对象，为什么
    抽象类中的普通方法可以使用子类调用
    抽象方法所在的类就是抽象类,使用abstract 修饰
    抽象类没有办法创建对象,因为创建对象为了调用属性和功能,抽象类中抽象方法没有方法实现,所以调用没有任何意义

    2.子类重写父类的方法有哪些注意事项
    在保留父类功能的基础上，增加子类特有功能
    子类重写父类方法时，必须保证权限大于等于父类的权限
    除了权限修饰符外，子类中的返回值，方法名，参数列表必须和父类的一致

* */
public class Demo4 {
    public static void main(String[] args) {
        //3.
//        ArrayList<Demo5Animal> demo5Animals = new ArrayList<>();
//        Cat cat = new Cat();
//        cat.save(demo5Animals);
//        cat.show(demo5Animals);

        //4.
        //圆面积
//        Shape Circle = new Circle();
//        Circle.area();
        //长方形面积
//        Shape Rectangle = new Rectangle();
//        Rectangle.area();

//        5.
        Demo6Car car = new Demo6Car();
        car.drive();
        SubCar subCar = new SubCar();
        subCar.drives();
    }
}
/*
4.创建一个抽象类Shape，声明计算图形面积的方法，分别定义子类Circle 和Rectangle，
在两个子类中按照不同图形面积公式，重写Shape中的方法。
圆形面积 = 圆周率*半径*半径
长方形面积 = 长*宽
* */
//创建抽象类
abstract class Shape{
    public abstract void area();
}
//圆的面积
class Circle extends Shape{

    @Override
    public void area() {
        System.out.println("输入圆的半径");
        Scanner sc = new Scanner(System.in);
        int radius = sc.nextInt();
        double mianji = 3.14*Math.pow(radius,2);
        System.out.println("圆的面积为:"+mianji);
    }
}
//长方形的面积
class Rectangle extends Shape{

    @Override
    public void area() {
        System.out.println("输入长方形的长");
        Scanner sc = new Scanner(System.in);
        int length = sc.nextInt();
        System.out.println("输入长方形的宽");
        int wide = sc.nextInt();
        int mianji = length*wide;
        System.out.println("长方形的面积为:"+mianji);
    }
}

